﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//using ENProyectoSIETE;
//using CADProyectoSIETE;
using ENProyecto7;
using System.Text.RegularExpressions;

namespace ProyectoSIETE
{
    public partial class frmGestionPersonajes : Form
    {
        private bool editando = false;

        private ENPersonaje seleccionado = new ENPersonaje("tipo",0,0,0);


        public frmGestionPersonajes()
        {
            InitializeComponent();
        }


        private void btGuardar_Click(object sender, EventArgs e)
        {
            string resultado;
            epPersonaje.SetError(tbTipoPersonaje, "");
            epPersonaje.SetError(nudAtaque, "");
            epPersonaje.SetError(nudDefensa, "");
            epPersonaje.SetError(nudVida, "");
            string alfanumericos = @"^[a-zA-Z0-9]*$";

            try
            {
                ENPersonaje personaje = new ENPersonaje(tbTipoPersonaje.Text, (int)nudAtaque.Value, (int)nudVida.Value, (int)nudDefensa.Value);

                if (nudAtaque.Value >= 0 && nudDefensa.Value >= 0 && nudVida.Value >= 1 && Regex.Match(tbTipoPersonaje.Text, alfanumericos).Success && tbTipoPersonaje.Text != "") //validacion
                {
                    seleccionado.AtaquePersonaje = (int)nudAtaque.Value;
                    seleccionado.DefensaPersonaje = (int)nudDefensa.Value;
                    seleccionado.VidaPersonaje = (int)nudVida.Value;
                    seleccionado.TipoPersonaje = tbTipoPersonaje.Text;
//introducir nuevo

                    seleccionado.insertarPersonaje();
                        

                    // se crea el objeto CAD y el dataSet
                    DataSet dataS;
                    // se actualiza el dgv
                    dataS = seleccionado.obtenerPersonajes();
                    dataGridView1.DataSource = dataS;
                    dataGridView1.DataMember = "personaje";

                    //this.personajeTableAdapter.Fill(this.bDProyecto7DataSet.Personaje);
                }
                else
                {

                    if(nudAtaque.Value < 0)
                    {
                        epPersonaje.SetError(nudAtaque, "El ataque debe ser mayor o igual que 0");
                    }
                    if(nudDefensa.Value < 0)
                    {
                        epPersonaje.SetError(nudDefensa, "La defensa debe ser mayor o igual que 0");                      
                    }
                    if(nudVida.Value < 1)
                    {
                        epPersonaje.SetError(nudVida, "La vida debe ser mayor o igual que 1");
                    }
                    if (!Regex.Match(tbTipoPersonaje.Text, alfanumericos).Success || tbTipoPersonaje.Text == "")
                    {
                        epPersonaje.SetError(tbTipoPersonaje, "Solo caracteres alfanumericos y no puede estar vacio");
                    }
                        
                    // ERROR por nuds o tipo
                }
 
            }
            catch (Exception ex) {
                MessageBox.Show(ex.ToString(), "", MessageBoxButtons.OK);
            }
        }

        private void frmGestionPersonajes_Load(object sender, EventArgs e)
        {
            try
            {
                // TODO: esta línea de código carga datos en la tabla 'bDProyecto7DataSet.Personaje' Puede moverla o quitarla según sea necesario.
                dataGridView1.DataSource = seleccionado.obtenerPersonajes();
                dataGridView1.DataMember = "personaje";

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "");
            }

        }

        private void btBorrar_Click(object sender, EventArgs e)
        {
           if (seleccionado.IdPersonaje != -1)
            {
                if (MessageBox.Show("¿Desea borrar el personaje " + seleccionado.TipoPersonaje + "?", "Confirmar borrar", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    try
                    {
                        string resultado;

                        seleccionado.borrarPersonaje();
                        DataSet dataS = new DataSet();
                        // se actualiza el dgv
                        dataS = seleccionado.obtenerPersonajes();
                        dataGridView1.DataSource = dataS;
                        dataGridView1.DataMember = "personaje";

                        //this.personajeTableAdapter.Fill(this.bDProyecto7DataSet.Personaje);


                        editando = false;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error al borrar un tipo de personaje" + ex.ToString(), "Error", MessageBoxButtons.OK);
                    }
                }
            }
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.RowIndex > -1)
                {
                    
                    // se obtiene el objeto seleccionado consultando a la BD
                    seleccionado.IdPersonaje = int.Parse(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
                    seleccionado.obtenerPersonaje();
                    // se van actualizando todos los campos


                    tbTipoPersonaje.Text = seleccionado.TipoPersonaje;
                    nudVida.Value = seleccionado.VidaPersonaje;
                    nudAtaque.Value = seleccionado.AtaquePersonaje;
                    nudDefensa.Value = seleccionado.DefensaPersonaje;

                    editando = true;
                }

            }
            catch
            {
                MessageBox.Show("Se ha producido un error al intentar cargar el personaje");

            }
        }

        private void btEditar_Click(object sender, EventArgs e)
        {
            string resultado;
            epPersonaje.SetError(tbTipoPersonaje, "");
            epPersonaje.SetError(nudAtaque, "");
            epPersonaje.SetError(nudDefensa, "");
            epPersonaje.SetError(nudVida, "");
            string alfanumericos = @"^[a-zA-Z0-9]*$";

            if (nudAtaque.Value >= 0 && nudDefensa.Value >= 0 && nudVida.Value >= 1 && Regex.Match(tbTipoPersonaje.Text, alfanumericos).Success && tbTipoPersonaje.Text != "") //validacion
            {
                seleccionado.AtaquePersonaje = (int)nudAtaque.Value;
                seleccionado.DefensaPersonaje = (int)nudDefensa.Value;
                seleccionado.VidaPersonaje = (int)nudVida.Value;
                seleccionado.TipoPersonaje = tbTipoPersonaje.Text;
                if (seleccionado.IdPersonaje != -1)
                {
                    seleccionado.editarPersonaje();
                    
                    MessageBox.Show("Personaje editado con exito", "", MessageBoxButtons.OK);
                    // se crea el objeto CAD y el dataSet
                    DataSet dataS;
                    // se actualiza el dgv
                    dataS = seleccionado.obtenerPersonajes();
                    dataGridView1.DataSource = dataS;
                    dataGridView1.DataMember = "personaje";

                }
                else
                {
                    MessageBox.Show("No hay ningun personaje seleccionado", "", MessageBoxButtons.OK);
                }

            }
            else
            {
                if (nudAtaque.Value < 0)
                {
                    epPersonaje.SetError(nudAtaque, "El ataque debe ser mayor o igual que 0");
                }
                if (nudDefensa.Value < 0)
                {
                    epPersonaje.SetError(nudDefensa, "La defensa debe ser mayor o igual que 0");
                }
                if (nudVida.Value < 1)
                {
                    epPersonaje.SetError(nudVida, "La vida debe ser mayor o igual que 1");
                }
                if (!Regex.Match(tbTipoPersonaje.Text, alfanumericos).Success || tbTipoPersonaje.Text == "")
                {
                    epPersonaje.SetError(tbTipoPersonaje, "Solo caracteres alfanumericos y no puede estar vacio");
                }

                // ERROR por nuds o tipo
            }
        }

        private void btNuevo_Click(object sender, EventArgs e)
        {
            tbTipoPersonaje.Text = seleccionado.TipoPersonaje;
            nudVida.Value = seleccionado.VidaPersonaje;
            nudAtaque.Value = seleccionado.AtaquePersonaje;
            nudDefensa.Value = seleccionado.DefensaPersonaje;

            editando = false;
        }

        private void btBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                DataTable listaresultados = new DataTable();

                listaresultados = seleccionado.obtenerPersonajeNombre(tbBuscar.Text);

                if (listaresultados.Rows.Count == 0)
                {
                    MessageBox.Show("No se ha encontrado ninguna coincidencia", "Error", MessageBoxButtons.OK);
                }
                else
                {

                    dataGridView1.DataSource = listaresultados;
                    dataGridView1.Refresh();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK);
            }
        }

        private void btSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btLimpiar_Click(object sender, EventArgs e)
        {
            editando = false;
            tbTipoPersonaje.Text = "";
            nudAtaque.Value = 0;
            nudDefensa.Value = 0;
            nudVida.Value = 1;
        }

        private void tbBuscar_MouseClick(object sender, MouseEventArgs e)
        {
            tbBuscar.Text = "";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if(editando)
            {
                string resultado;
                epPersonaje.SetError(tbTipoPersonaje, "");
                epPersonaje.SetError(nudAtaque, "");
                epPersonaje.SetError(nudDefensa, "");
                epPersonaje.SetError(nudVida, "");
                string alfanumericos = @"^[a-zA-Z0-9]*$";

                if (nudAtaque.Value >= 0 && nudDefensa.Value >= 0 && nudVida.Value >= 1 && Regex.Match(tbTipoPersonaje.Text, alfanumericos).Success && tbTipoPersonaje.Text != "") //validacion
                {
                    seleccionado.AtaquePersonaje = (int)nudAtaque.Value;
                    seleccionado.DefensaPersonaje = (int)nudDefensa.Value;
                    seleccionado.VidaPersonaje = (int)nudVida.Value;
                    seleccionado.TipoPersonaje = tbTipoPersonaje.Text;

                    seleccionado.editarPersonaje();

                    MessageBox.Show("Personaje editado con exito", "", MessageBoxButtons.OK);
                    // se crea el objeto CAD y el dataSet
                    DataSet dataS;
                    // se actualiza el dgv
                    dataS = seleccionado.obtenerPersonajes();
                    dataGridView1.DataSource = dataS;
                    dataGridView1.DataMember = "personaje";
                  
                }
                else
                {
                    if (nudAtaque.Value < 0)
                    {
                        epPersonaje.SetError(nudAtaque, "El ataque debe ser mayor o igual que 0");
                    }
                    if (nudDefensa.Value < 0)
                    {
                        epPersonaje.SetError(nudDefensa, "La defensa debe ser mayor o igual que 0");
                    }
                    if (nudVida.Value < 1)
                    {
                        epPersonaje.SetError(nudVida, "La vida debe ser mayor o igual que 1");
                    }
                    if (!Regex.Match(tbTipoPersonaje.Text, alfanumericos).Success || tbTipoPersonaje.Text == "")
                    {
                        epPersonaje.SetError(tbTipoPersonaje, "Solo caracteres alfanumericos y no puede estar vacio");
                    }

                    // ERROR por nuds o tipo
                }
            }
            else{
                string resultado;
                epPersonaje.SetError(tbTipoPersonaje, "");
                epPersonaje.SetError(nudAtaque, "");
                epPersonaje.SetError(nudDefensa, "");
                epPersonaje.SetError(nudVida, "");
                string alfanumericos = @"^[a-zA-Z0-9]*$";

                try
                {
                    ENPersonaje personaje = new ENPersonaje(tbTipoPersonaje.Text, (int)nudAtaque.Value, (int)nudVida.Value, (int)nudDefensa.Value);

                    if (nudAtaque.Value >= 0 && nudDefensa.Value >= 0 && nudVida.Value >= 1 && Regex.Match(tbTipoPersonaje.Text, alfanumericos).Success && tbTipoPersonaje.Text != "") //validacion
                    {
                        seleccionado.AtaquePersonaje = (int)nudAtaque.Value;
                        seleccionado.DefensaPersonaje = (int)nudDefensa.Value;
                        seleccionado.VidaPersonaje = (int)nudVida.Value;
                        seleccionado.TipoPersonaje = tbTipoPersonaje.Text;
                        //introducir nuevo

                        seleccionado.insertarPersonaje();
                       

                        // se crea el objeto CAD y el dataSet
                        DataSet dataS;
                        // se actualiza el dgv
                        dataS = seleccionado.obtenerPersonajes();
                        dataGridView1.DataSource = dataS;
                        dataGridView1.DataMember = "personaje";

                        //this.personajeTableAdapter.Fill(this.bDProyecto7DataSet.Personaje);
                    }
                    else
                    {

                        if (nudAtaque.Value < 0)
                        {
                            epPersonaje.SetError(nudAtaque, "El ataque debe ser mayor o igual que 0");
                        }
                        if (nudDefensa.Value < 0)
                        {
                            epPersonaje.SetError(nudDefensa, "La defensa debe ser mayor o igual que 0");
                        }
                        if (nudVida.Value < 1)
                        {
                            epPersonaje.SetError(nudVida, "La vida debe ser mayor o igual que 1");
                        }
                        if (!Regex.Match(tbTipoPersonaje.Text, alfanumericos).Success || tbTipoPersonaje.Text == "")
                        {
                            epPersonaje.SetError(tbTipoPersonaje, "Solo caracteres alfanumericos y no puede estar vacio");
                        }

                        // ERROR por nuds o tipo
                    }

                }
                catch
                {
                    MessageBox.Show("Se ha producido un error al intentar crear el personaje");
                }
            }
        }
    }
}
